/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package lab9;
import java.io.*;
import java.util.ArrayList;
import java.util.Scanner;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;
/**
 *
 * @author usuario
 */
public class Driver {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        
        int cont=0;
        //AlgoritmoFloyd floyd;
        String origen;
        String destino;
        String[] arreglo = null;
        Graph grafo= new Graph();
        String directorioActual = System.getProperty("user.dir");
        //int y1=0;
        //GraphMatrix grafoMatriz, grafoFloyd;
        //grafoMatriz = new GraphMatrix();
        //grafoFloyd = new GraphMatrix();
        //ArrayList ciudadesNoRep = new ArrayList();
        //ArrayList ciudadesInter = new ArrayList();
        
        try{
            
            System.out.println(directorioActual);
            // Abrimos el archivo
            FileInputStream fstream = new FileInputStream(directorioActual + "\\src\\lab9\\grafo.txt");
            // Creamos el objeto de entrada
            DataInputStream entrada = new DataInputStream(fstream);
            // Creamos el Buffer de Lectura
            BufferedReader buffer = new BufferedReader(new InputStreamReader(entrada));
            String strLinea;
            // Leer el archivo linea por linea
            while ((strLinea = buffer.readLine()) != null)   {
                // Imprimimos la línea por pantalla
                arreglo=strLinea.split("-");
                if(cont==0){
                    
                    System.out.print("Los vertices son ("+arreglo.length+"): ");
                    for(int x=0;x<arreglo.length;x++){
                        System.out.print(arreglo[x]+" ");
                        grafo.addVertex(arreglo[x]);
                    }
                }
                else if(arreglo.length==3){
                    grafo.addEdge(arreglo[0], arreglo[1], Double.parseDouble(arreglo[2]));
                    System.out.println("Se creo la arista con  origen "+arreglo[0]+", destino "+arreglo[1]+" y peso "+arreglo[2]);
                }
                cont++;
            }
            // Cerramos el archivo
            entrada.close();
        }catch (Exception e){ //Catch de excepciones
            System.err.println("Ocurrio un error: " + e.getMessage());
        }
        int opc = 1;
        Scanner scan = new Scanner(System.in);
        while(opc!=5){
            grafo.crearMatriz();
            grafo.algoritmoFloyd();
            System.out.println("----------------------------------------------------------------");
            System.out.println("1. Conocer la ruta más corta entre dos ciudades\n2. Conocer el centro del grafo\n3. Modificar el grafo\n4. Mostrar todas las rutas\n5. Salir");
            opc = scan.nextInt();
            switch(opc){
                case 1:
                    System.out.println("Ciudad de origen: ");
                    scan.nextLine();
                    origen = scan.nextLine();
                    System.out.println("Ciudad destino: ");
                    destino = scan.nextLine();
                    
                   
        
        
        
                //se elije el archivo
                
                /*try{
                    //se le hace un file reader al archivo y se le bufferea
                    FileInputStream fstream = new FileInputStream(directorioActual + "\\src\\lab9\\grafo1.txt");
            // Creamos el objeto de entrada
                    DataInputStream entrada = new DataInputStream(fstream);
                    BufferedReader bufferR = new BufferedReader(new InputStreamReader(entrada));
                    String line = null;
                    while((line=bufferR.readLine())!=null){
                        y1++;
                    }
                    
                }catch(Exception e){
                    JOptionPane.showMessageDialog(null,e.getMessage());
                }finally{
                    
                    try{
                        FileInputStream fstream = new FileInputStream(directorioActual + "\\src\\lab9\\grafo.txt");
            // Creamos el objeto de entrada
                    DataInputStream entrada = new DataInputStream(fstream);
                        BufferedReader bufferR = new BufferedReader(new InputStreamReader(entrada));   
                        int contador=0;
                        String line=null;
                        while((line=bufferR.readLine())!=null){
                            String[] caracteres=line.split(" ");
                            for(int i=0; i<caracteres.length; i++){
                                if (i!=2 && !ciudadesNoRep.contains(caracteres[i])){
                                    ciudadesNoRep.add(caracteres[i]);
                                    
                                }
                            }
                            grafoMatriz.add(caracteres[0]);
                            grafoMatriz.add(caracteres[1]);
                            grafoMatriz.addEdge(caracteres[0],caracteres[1],caracteres[2]);
                            contador++;
                        }
                    }catch(Exception e){}
                     floyd = new AlgoritmoFloyd(grafoMatriz);
                     grafoFloyd = floyd.Floyd();
                }*/
                System.out.println(grafo.getRecorrido(origen, destino));
                
                
            
                    
                    
                    
                    
                    
                    
                    break;
                case 2:
                    System.out.println(grafo.getCenter());
                    break;
                case 3:
                    int opc2 = 0;
                    while(opc2!=3){
                        
                        System.out.println("\t1. Crear interrupcion entre dos ciudades\n\t2. Crear conexión entre dos ciudades\n\t3. Cancelar");
                        opc2 = scan.nextInt();
                        switch(opc2){
                            case 1:
                                System.out.println("Ciudad de origen: ");
                                scan.nextLine();
                                origen = scan.nextLine();
                                System.out.println("Ciudad destino: ");
                                destino = scan.nextLine();
                                if(!grafo.removeEdge(origen, destino)){
                                    System.out.println("No se pudo crear dicha interrupcion");
                                }else{
                                    System.out.println("Se creo exitosamente");
                                }
                                
                                break;
                            case 2:
                                
                                System.out.println("Ciudad de origen: ");
                                scan.nextLine();
                                String origen2 = scan.nextLine();
                                System.out.println("Ciudad destino: ");
                                String destino2 = scan.nextLine();
                                System.out.println("Distancia entre ambas ciudades: ");
                                double peso = scan.nextDouble();
                                try {
                                    grafo.addEdge(origen2, destino2, peso);
                                    System.out.println("Se creo exitosamente");
                                } catch (Exception ex) {
                                    System.out.println("No se puedo crear dicha conexion");
                                }
                                break;
                            case 3:
                                break;
                            default:
                                System.out.println("opcion incorrecta!!");
                        }
                    }
                    break;
                case 4:
                    grafo.imprimirMatriz();
                    break;
                case 5:
                    System.out.println("Gracias por utilizar el programa");
                    break;
                default:
                    System.out.println("opcion incorrecta!!");
            }
            
            
            
            
        }
    }

     
               
    
}
